home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / system / devlod.zip / MOVUP.ASM < prev   
Assembly Source File  |  1990-09-25  |  2KB  |  80 lines

  1.         NAME    movup
  2. ;[]------------------------------------------------------------[]
  3. ;|      MOVUP.ASM -- helper code for DEVLOD.C                   |
  4. ;|      Copyright 1990 by Jim Kyle - All Rights Reserved        |
  5. ;[]------------------------------------------------------------[]
  6.  
  7. _TEXT   SEGMENT BYTE PUBLIC 'CODE'
  8. _TEXT   ENDS
  9.  
  10. _DATA   SEGMENT WORD PUBLIC 'DATA'
  11. _DATA   ENDS
  12.  
  13. _BSS    SEGMENT WORD PUBLIC 'BSS'
  14. _BSS    ENDS
  15.  
  16. DGROUP  GROUP   _TEXT, _DATA, _BSS
  17.  
  18. ASSUME  CS:_TEXT, DS:DGROUP
  19.  
  20. _TEXT   SEGMENT BYTE PUBLIC 'CODE'
  21.  
  22. ;-----------------------------------------------------------------
  23. ;       movup( src, dst, nbytes )
  24. ;       src and dst are far pointers. area overlap is NOT okay
  25. ;-----------------------------------------------------------------
  26.         PUBLIC  _movup
  27.  
  28. _movup  PROC      NEAR
  29.         push    bp
  30.         mov     bp, sp
  31.         push    si
  32.         push    di
  33.         lds     si,[bp+4]               ; source
  34.         les     di,[bp+8]               ; destination
  35.         mov     bx,es                   ; save dest segment
  36.         mov     cx,[bp+12]              ; byte count
  37.         cld
  38.         rep     movsb                   ; move everything to high ram
  39.         mov     ss,bx                   ; fix stack segment ASAP
  40.         mov     ds,bx                   ; adjust DS too
  41.         pop     di
  42.         pop     si
  43.         mov     sp, bp
  44.         pop     bp
  45.         pop     dx                      ; Get return address
  46.         push    bx                      ; Put segment up first
  47.         push    dx                      ; Now a far address on stack
  48.         retf
  49. _movup  ENDP
  50.  
  51. ;-------------------------------------------------------------------
  52. ;       copyptr( src, dst )
  53. ;       src and dst are far pointers.
  54. ;       moves exactly 4 bytes from src to dst.
  55. ;-------------------------------------------------------------------
  56.         PUBLIC  _copyptr
  57.  
  58. _copyptr        PROC      NEAR
  59.         push    bp
  60.         mov     bp, sp
  61.         push    si
  62.         push    di
  63.         push    ds
  64.         lds     si,[bp+4]               ; source
  65.         les     di,[bp+8]               ; destination
  66.         cld
  67.         movsw
  68.         movsw
  69.         pop     ds
  70.         pop     di
  71.         pop     si
  72.         mov     sp, bp
  73.         pop     bp
  74.         ret
  75. _copyptr        ENDP
  76.  
  77. _TEXT   ENDS
  78.  
  79.         end
  80.